// 一次遍历
var isValidSudoku = function (board) {
  // 分别记录数独的每一行和每一列中的每个数字的出现次数
  const rows = new Array(9).fill(0).map(() => new Array(9).fill(0))
  const columns = new Array(9).fill(0).map(() => new Array(9).fill(0))
  // 记录数独的每一个小九宫格中的每个数字的出现次数
  const subboxes = new Array(3)
    .fill(0)
    .map(() => new Array(3).fill(0).map(() => new Array(9).fill(0)))

  for (let i = 0; i < 9; i++) {
    for (let j = 0; j < 9; j++) {
      const c = board[i][j]
      if (c !== ".") {
        // 计数
        const index = c.charCodeAt() - "0".charCodeAt() - 1
        rows[i][index]++
        columns[j][index]++
        subboxes[Math.floor(i / 3)][Math.floor(j / 3)][index]++
        if (
          rows[i][index] > 1 ||
          columns[j][index] > 1 ||
          subboxes[Math.floor(i / 3)][Math.floor(j / 3)][index] > 1
        ) {
          return false
        }
      }
    }
  }
  return true
}
